linux下ls

您所在的位置:网站首页 linux nobody用户权限 linux下ls

linux下ls

2023-07-25 07:43| 来源: 网络整理| 查看: 265

今天上了一个xxx系统,通过tomcat和apache发布上线,提供对外访问能力。

首先,通过root用户启动apache和tomcat,同时系统挂载了文件服务器的一个目录upload,发现文件上传时,不能在服务器端正常创建目录,写文件,说权限不够。

尝试修改upload的权限:chmod 777 upload

发现xxx系统可以在服务端正常写文件了。问题是root用户启动的xxx系统,权限最大,但为什么不能写文件呢?

先看看http://linux.chinaunix.net/techdoc/system/2007/03/26/953339.shtml以下为摘要

NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统的计算机间共享文件和外设,所以它的通讯协定设计与主机及操作系统无关. 它是由SUN公司于1984年推出,使得可以本地机一样的使用另一台联网计算机的文件和外设。NFS在文件传送或信息传送过程中依赖于RPC协议。

图一、NFS 主机分享目录与 Client 挂载示意图   就如同上面的图示一般,当我们的NFS Server设定好共享出来的/home/sharefile这个目录后,其他的NFS Client端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自定义),例如前面图示中的NFS client 1与NFS client 2挂载的目录就不相同。我只要在 NFS client 1系统中进入/home/data/sharefile内,就可以看到 NFS Server系统内的/home/sharefile目录下的所有资料了 (当然,权限要足够)。这个 /home/data/sharefile 就好像 NFS client 1自己机器里面的一个 partition。只要权限对了,那么您可以使用 cp, cd, mv, rm... 等等磁盘或文件相关的命令。   好的,既然NFS是通过网络来进行文件的传输,那么经由socket pair的概念你会知道NFS应该会使用一些port吧?那么NFS使用哪个 port来进行传输呢?答案是....不知道?因为NFS用来传输的port是随机选择小于1024以下的端口来使用的。那客户端怎么知道你服务器端使用那个port呢?此时就得要远程过程调用(Remote Procedure Call, RPC)的协议来辅助,下面我们就来谈谈什么是 RPC? 2.2 什么是 RPC (Remote Procedure Call)   RPC, 远程过程调用 (remote procedure call)是能使客户端执行其他系统中程序的一种机制。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。常用于分布式客户端/服务器模型,发出请求的程序是客户程序,而提供服务的程序是服务器。   因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些 port 来传输文件,因此, NFS 的功能所对应的 port 才没有固定, 而是采用随机取用一些未被使用的小于 1024 的端口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困拢, 因为客户端得要知道服务器端的相关端口才能够连接!   此时我们就得需要远程过程调用(RPC) 的服务,RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且返回给客户端,让客户端可以连结到正确的端口上去。 那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并返回客户端正确的端口。   注:在启动 NFS 之前,RPC 就要先启动了,否则NFS会无法向 RPC 注册。 另外,RPC若重新启动时,原来注册的资料会不见,因此RPC重新启动后,它管理的所有程序都需要重新启动以重新向RPC注册。

图二、NFS 与 RPC 服务及文件系统操作的相关性                如上图所示,当客户端有NFS文件存取需求时,它会如何向服务器端请求文件呢?   1)、客户端会向服务器端的RPC(port 111)发出NFS档案存取功能的询问要求;   2)、服务器端找到对应的已注册的NFS daemon端口后,会返回给客户端;   3)、客户端了解正确的端口后,就可以直接与NFS daemon来建立连接;   由于 NFS 的各项功能都必须要向RPC来注册,如此一来RPC就能了解NFS这个服务的各项功能之port number, PID, NFS 在主机所监听的IP等等,而客户端才能够通过RPC的询问找到正确对应的端口。 也就是说,NFS 必须要有RPC存在时才能成功的提供服务,因此我们称NFS为RPC server的一种。事实上,有很多这样的服务器都是向RPC注册的,举例来说,NIS (Network Information Service)也是RPC server 的一种。 此外,由图二你也会知道,不论是客户端还是服务器端,要使用 NFS 时,两者都需要启动 RPC 才行。   更多的 NFS 相关协议信息你可以参考下面网页:      http://www.faqs.org/rfcs/rfc1094.html      http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

所以,root用户的权限在尝试修改文件服务器上的文件时,文件系统将其识别为65534,匿名用户,限制了其写文件的权限。并且0~1024端口系统是保留做文件传输用的。

所以我们尝试换个用户启动xxx系统,但发现启动apache的httpd时,80端口没有权限使用。所以需要修改apache的目录的属性,设置setid

先看看http://www.cnblogs.com/qlwy/archive/2011/06/26/2121919.html以下为摘要

众所周知,Linux的文件权限如: 777;666等,其实只要在相应的文件上加上UID的权限,就可以用到加权限人的身份去运行这个文件。所以我们只需要将bash复制出来到另一个地方,然后用root加上UID权限,只要用户运行此Shell就可以用用root的身份来执行任何文件了

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.

如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置. 

setuid:该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/passwd文件是用户管理的配置文件,只有root权限的用户才能更改

  [root@localhost ~]# ls -l /etc/passwd

  -rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd

  作为普通用户如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,但是不是可以通过一个命令来修改呢答案是肯定的,作为普通用户可以通过passwd 来修改自己的口令这归功于passwd命令的权限我们来看一下;

  [root@localhost ~]# ls -l /usr/bin/passwd

  -r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd

  因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以达到修改自己口令的权限

修改了apache的安装目录的属性为“drswxr-xr-x”,再启动应用系统,就OK了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3